Don't crash when a parent relative bg pixmap is set, and no parent has a
authorRichard Hult <richard@imendio.com>
Mon, 3 Dec 2007 19:34:30 +0000 (19:34 +0000)
committerRichard Hult <rhult@src.gnome.org>
Mon, 3 Dec 2007 19:34:30 +0000 (19:34 +0000)
2007-12-03  Richard Hult  <richard@imendio.com>

* gdk/quartz/gdkwindow-quartz.c:
(gdk_window_impl_quartz_begin_paint_region): Don't crash when a
parent relative bg pixmap is set, and no parent has a bg
pixmap. Fixes bug #500804.

svn path=/trunk/; revision=19100

ChangeLog
gdk/quartz/gdkwindow-quartz.c

index fb810c01604d71d7f3e56125f1cd0490f6d17d0c..50b34ad4d09c9c0665f3553ea6672d1df8eec8ad 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-12-03  Richard Hult  <richard@imendio.com>
+
+       * gdk/quartz/gdkwindow-quartz.c:
+       (gdk_window_impl_quartz_begin_paint_region): Don't crash when a
+       parent relative bg pixmap is set, and no parent has a bg
+       pixmap. Fixes bug #500804.
+
 2007-12-03  Matthias Clasen  <mclasen@redhat.com>
 
        Two optimizations for icon cache lookups.
index e3e97a9d7c5df3ce3f648bc92eca435ac4818d17..d128f2c32f383268a306725219f697ed51a0d2b2 100644 (file)
@@ -209,7 +209,7 @@ gdk_window_impl_quartz_begin_paint_region (GdkPaintable *paintable,
       x_offset = y_offset = 0;
 
       window = GDK_WINDOW (drawable_impl->wrapper);
-      while (window && ((GdkWindowObject *) window)->bg_pixmap == GDK_PARENT_RELATIVE_BG)
+      while (window && bg_pixmap == GDK_PARENT_RELATIVE_BG)
         {
           /* If this window should have the same background as the parent,
            * fetch the parent. (And if the same goes for the parent, fetch
@@ -218,6 +218,16 @@ gdk_window_impl_quartz_begin_paint_region (GdkPaintable *paintable,
           x_offset += ((GdkWindowObject *) window)->x;
           y_offset += ((GdkWindowObject *) window)->y;
           window = GDK_WINDOW (((GdkWindowObject *) window)->parent);
+          bg_pixmap = ((GdkWindowObject *) window)->bg_pixmap;
+        }
+
+      if (bg_pixmap == NULL || bg_pixmap == GDK_NO_BG || bg_pixmap == GDK_PARENT_RELATIVE_BG)
+        {
+          /* Parent relative background but the parent doesn't have a
+           * pixmap.
+           */ 
+          g_free (rects);
+          return;
         }
 
       /* Note: There should be a CG API to draw tiled images, we might